package simulaco.business;

import gminet.infra.business.BusinessException;
import gminet.infra.business.BusinessObject;
import gminet.infra.db.Transaction;
import gminet.infra.db.TransactionException;

import java.sql.Connection;
import java.util.List;

import simulaco.dao.SimuladoUsuarioQuestaoDAO;
import simulaco.dto.SimuladoUsuario;
import simulaco.dto.SimuladoUsuarioQuestao;

public class SimuladoUsuarioQuestaoBusiness extends BusinessObject {

    public static List<SimuladoUsuarioQuestao> findBySimuladoUsuario(int codigoUsuario, int codigoSimulado)
            throws TransactionException {

        List<SimuladoUsuarioQuestao> listaSimuladoQuestao = null;
        Transaction transaction = createTransaction();
        try {
            Connection conn = transaction.getConnection();
            // QUESTAO
            listaSimuladoQuestao = findBySimuladoUsuario(codigoUsuario, codigoSimulado, conn);
            // COMMIT
            transaction.commit();
            //
        } catch (TransactionException te) {
            transaction.rollback();
            throw te;
        } finally {
            transaction.release();
        }
        return listaSimuladoQuestao;
    }

    public static List<SimuladoUsuarioQuestao> findBySimuladoUsuario(int codigoUsuario, int codigoSimulado,
            Connection conn) throws TransactionException {

        return SimuladoUsuarioQuestaoDAO.findBySimulado(codigoUsuario, codigoSimulado, conn);
    }

    protected static void insert(SimuladoUsuarioQuestao simuladoQuestao) throws BusinessException, TransactionException {

        Transaction transaction = createTransaction();
        try {
            Connection conn = transaction.getConnection();
            // QUESTAO
            insert(simuladoQuestao, conn);
            // COMMIT
            transaction.commit();
            //
        } catch (TransactionException te) {
            transaction.rollback();
            throw te;
        } finally {
            transaction.release();
        }
    }

    protected static void insert(SimuladoUsuarioQuestao simuladoQuestao, Connection conn) throws BusinessException,
            TransactionException {

        SimuladoUsuarioQuestaoDAO.insert(simuladoQuestao, conn);
    }

    protected static void insertAll(SimuladoUsuario simulado, Connection conn) throws BusinessException,
            TransactionException {

        List<SimuladoUsuarioQuestao> simuladoQuestoes = simulado.getListaSimuladoQuestao();
        // INCLUIR NOVOS
        for (SimuladoUsuarioQuestao simulaQuestao : simuladoQuestoes) {
            if (SimuladoUsuarioQuestaoDAO.findByPK(simulaQuestao, conn) == null) {
                SimuladoUsuarioQuestaoDAO.insert(simulaQuestao, conn);
            }
        }
    }

    protected static void update(SimuladoUsuarioQuestao simuladoQuestao) throws BusinessException, TransactionException {

        Transaction transaction = createTransaction();
        try {
            Connection conn = transaction.getConnection();
            // QUESTAO
            SimuladoUsuarioQuestaoDAO.update(simuladoQuestao, conn);
            // COMMIT
            transaction.commit();
            //
        } catch (TransactionException te) {
            transaction.rollback();
            throw te;
        } finally {
            transaction.release();
        }
    }

    public static void deleteBySimulado(SimuladoUsuario simulado, Connection conn) throws TransactionException {

        SimuladoUsuarioQuestaoDAO.deleteBySimulado(simulado, conn);
    }

}
